package com.zklh.leetcode.other.problem49;

import java.util.*;

/**
 * @descrpiton 字母异位词分组算法实现
 * @author 坐看落花
 * @version 1.0
 * @date 2019/12/25
 */
public class Solution {



    public List<List<String>> groupAnagrams(String[] strs) {
        if(strs.length == 0){
            return null;
        }

        int maxLength = 0;
        for (String str : strs) {
            maxLength = str.length()>maxLength ? str.length() : maxLength;
        }

        // 作为盛放每个字符串转化为排好序char数组的容器,这里认为默认一个容器中的字符串长度相同, 如果不同需要调整
        char[] orderedChars = new char[maxLength];
        // 这个map作为盛放排好序的char作为key, 用于存储异位词
        HashMap<String,List<String>> map = new HashMap<>();

        for (String str : strs) {
            parseOrderedChars(str, orderedChars);
            String key = new String(orderedChars);
            List<String> anagrams = map.get(key);
            if(anagrams == null){
                anagrams = new LinkedList<>();
                anagrams.add(str);
                map.put(key,anagrams);
            }else{
                anagrams.add(str);
            }
        }
        List<List<String>> result = new LinkedList<>();
        result.addAll(map.values());
        return result;
    }

    /**
     * 用于将传入的字符串转为排好序的char数组,这里使用升序
     * @param str
     * @return
     */
    private void parseOrderedChars(String str,char[] charTable){
        if(str.length() < charTable.length){
            for (int i = 0; i < charTable.length; i++) {
                charTable[i] = 0;
            }
        }
        str.getChars(0,str.length(),charTable,0);
        // 这里使用java自带的快速排序
        Arrays.sort(charTable);
    }


    public static void main(String[] args){
        System.out.println('a' + 1);
    }

}

